package ar.edu.isft189.controller;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ar.edu.isft189.dao.GeneralCrudDao;
import ar.edu.isft189.model.Entidad;
import ar.edu.isft189.model.Usuario;

public class CRUDGeneral extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private GeneralCrudDao dao;
	private List<Entidad> lstEnt;

	public CRUDGeneral() {
		dao = new GeneralCrudDao();
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		if (request.getParameter("action") != null) {

			String action = (String) request.getParameter("action");
			response.setContentType("application/json");

			switch (action) {
			case "listDocentesLabel":
				listDocentesLabel(request, response);
				break;
			case "login":
				login(request, response);
				break;
			case "listMateriasLabel":
				listMateriasLabel(request, response);
				break;
			}
		}
	}

	/**
	 * Metodo que recibe una lista de Entodades y devuelve un string con el
	 * formato Json para que se pueda cargar un combo
	 * 
	 * @param lista
	 * @return String
	 */
	private String processListToJsonOption(List<Entidad> lista) {

		String select = "";
		for (Entidad obj : lista) {
			select = select + "{\"DisplayText\":\"" + obj.getDesc()
					+ "\",\"Value\":\"" + obj.getId() + "\"},";
		}

		select = select.substring(0, select.lastIndexOf(","));
		return select;
	}

	/**
	 * 
	 * 
	 * @param request
	 * @param response
	 * @throws IOException
	 */
	private void listDocentesLabel(HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		
		lstEnt = new ArrayList<Entidad>();
		
		try {
			// Obtengo la lista de Mesas
			lstEnt = dao.getDocentesLabel();
			// Lo convierto para ser usado en el combo
			String select = processListToJsonOption(lstEnt);

			String listData;
			// Return Json in the format required by jTable plugin
			listData = "{\"Result\":\"OK\",\"Options\":[" + select
					+ "]}";
			System.out.println("Json " + listData);
			response.getWriter().print(listData);

		} catch (Exception ex) {
			String error = "{\"Result\":\"ERROR\",\"Message\":"
					+ ex.getMessage() + "}";
			response.getWriter().print(error);
			System.out.println("Json " + error);
			ex.printStackTrace();
		}
	}
	
	/**
	 * 
	 * 
	 * @param request
	 * @param response
	 * @throws IOException
	 */
	private void listMateriasLabel(HttpServletRequest request,
			HttpServletResponse response) throws IOException{
		
		lstEnt = new ArrayList<Entidad>();
		
		try {
			// Obtengo todas las Materias
			lstEnt = dao.getMateriasLabel();
			// Lo convierto para ser usado en el combo
			String select = processListToJsonOption(lstEnt);

			String listData;
			// Return Json in the format required by jTable plugin
			listData = "{\"Result\":\"OK\",\"Options\":[" + select
					+ "]}";
			System.out.println("Json " + listData);
			response.getWriter().print(listData);

		} catch (Exception ex) {
			String error = "{\"Result\":\"ERROR\",\"Message\":"
					+ ex.getMessage() + "}";
			response.getWriter().print(error);
			System.out.println("Json " + error);
			ex.printStackTrace();
		}
	}
	
	/**
	 * 
	 * 
	 * @param request
	 * @param response
	 * @throws IOException
	 */
	private void login (HttpServletRequest request,
			HttpServletResponse response) throws IOException{
		
		try {
			String usr = request.getParameter("user").toString();
			String psw = request.getParameter("psw").toString();
			// Invocacion al DAO LOGIN para obtener los datos del
			// usuario que se logueo
			Usuario u = dao.login(usr, psw);

			if (u != null) {
				// Guardo los datos de usuario en la session
				request.getSession().setAttribute("usuario", u);
				request.getSession().setAttribute("perfil",
						u.getPerfil());

				String json = "{\"Result\":\"OK\"}";
				System.out.println("Json " + json);
				response.getWriter().print(json);
			} else {
				// Si no existe el usuario
				String error = "{\"Result\":\"ERROR\",\"Message\": \"El Usuario no Existe\"}";
				response.getWriter().print(error);
			}
		} catch (Exception ex) {
			String error = "{\"Result\":\"ERROR\",\"Message\":"
					+ ex.getMessage() + "}";
			response.getWriter().print(error);
			System.out.println("Json " + error);
			ex.printStackTrace();
		}
	}		
}